home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Tools / lynx-2.4 / WWW / Library / Implementation / crypt.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-28  |  3.4 KB  |  130 lines

  1. /*
  2.  * UFC-crypt: ultra fast crypt(3) implementation
  3.  *
  4.  * Copyright (C) 1991, 1992, Free Software Foundation, Inc.
  5.  *
  6.  * This library is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU Library General Public
  8.  * License as published by the Free Software Foundation; either
  9.  * version 2 of the License, or (at your option) any later version.
  10.  *
  11.  * This library is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14.  * Library General Public License for more details.
  15.  * 
  16.  * You should have received a copy of the GNU Library General Public
  17.  * License along with this library; if not, write to the Free
  18.  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  *
  20.  * @(#)crypt.c    2.19 5/28/92
  21.  *
  22.  * Semiportable C version
  23.  *
  24.  */
  25.  
  26. #ifndef HTUTILS_H
  27. #include "HTUtils.h"
  28. #endif
  29.  
  30. #include "ufc-crypt.h"
  31.  
  32. #include "LYLeaks.h"
  33.  
  34. #ifdef _UFC_32_
  35.  
  36. /*
  37.  * 32 bit version
  38.  */
  39.  
  40. extern long32 _ufc_keytab[16][2];
  41. extern long32 _ufc_sb0[], _ufc_sb1[], _ufc_sb2[], _ufc_sb3[];
  42.  
  43. #define SBA(sb, v) (*(long32*)((char*)(sb)+(v)))
  44.  
  45. static ufc_long ary[4];
  46.  
  47. ufc_long *_ufc_doit(l1, l2, r1, r2, itr)
  48.   ufc_long l1, l2, r1, r2, itr;
  49.   { int i;
  50.     long32 s, *k;
  51.     register long32 *sb0 = _ufc_sb0;
  52.     register long32 *sb1 = _ufc_sb1;
  53.     register long32 *sb2 = _ufc_sb2;
  54.     register long32 *sb3 = _ufc_sb3;
  55.  
  56.     while(itr--) {
  57.       k = &_ufc_keytab[0][0];
  58.       for(i=8; i--; ) {
  59.     s = *k++ ^ r1;
  60.     l1 ^= SBA(sb1, s & 0xffff); l2 ^= SBA(sb1, (s & 0xffff)+4);  
  61.         l1 ^= SBA(sb0, s >>= 16);   l2 ^= SBA(sb0, (s)         +4); 
  62.         s = *k++ ^ r2; 
  63.         l1 ^= SBA(sb3, s & 0xffff); l2 ^= SBA(sb3, (s & 0xffff)+4);
  64.         l1 ^= SBA(sb2, s >>= 16);   l2 ^= SBA(sb2, (s)         +4);
  65.  
  66.         s = *k++ ^ l1; 
  67.         r1 ^= SBA(sb1, s & 0xffff); r2 ^= SBA(sb1, (s & 0xffff)+4);  
  68.         r1 ^= SBA(sb0, s >>= 16);   r2 ^= SBA(sb0, (s)         +4); 
  69.         s = *k++ ^ l2; 
  70.         r1 ^= SBA(sb3, s & 0xffff); r2 ^= SBA(sb3, (s & 0xffff)+4);  
  71.         r1 ^= SBA(sb2, s >>= 16);   r2 ^= SBA(sb2, (s)         +4);
  72.       } 
  73.       s=l1; l1=r1; r1=s; s=l2; l2=r2; r2=s;
  74.     }
  75.     ary[0] = l1; ary[1] = l2; ary[2] = r1; ary[3] = r2;
  76.     return ary;
  77.   }
  78.  
  79. #endif
  80.  
  81. #ifdef _UFC_64_
  82.  
  83. /*
  84.  * 64 bit version
  85.  */
  86.  
  87. extern long64 _ufc_keytab[16];
  88. extern long64 _ufc_sb0[], _ufc_sb1[], _ufc_sb2[], _ufc_sb3[];
  89.  
  90. #define SBA(sb, v) (*(long64*)((char*)(sb)+(v)))
  91.  
  92. static ufc_long ary[4];
  93.  
  94. ufc_long *_ufc_doit(l1, l2, r1, r2, itr)
  95.   ufc_long l1, l2, r1, r2, itr;
  96.   { int i;
  97.     long64 l, r, s, *k;
  98.     register long64 *sb0 = _ufc_sb0;
  99.     register long64 *sb1 = _ufc_sb1;
  100.     register long64 *sb2 = _ufc_sb2;
  101.     register long64 *sb3 = _ufc_sb3;
  102.  
  103.     l = (((long64)l1) << 32) | ((long64)l2);
  104.     r = (((long64)r1) << 32) | ((long64)r2);
  105.  
  106.     while(itr--) {
  107.       k = &_ufc_keytab[0];
  108.       for(i=8; i--; ) {
  109.     s = *k++ ^ r;
  110.     l ^= SBA(sb3, (s >>  0) & 0xffff);
  111.         l ^= SBA(sb2, (s >> 16) & 0xffff);
  112.         l ^= SBA(sb1, (s >> 32) & 0xffff);
  113.         l ^= SBA(sb0, (s >> 48) & 0xffff);
  114.  
  115.     s = *k++ ^ l;
  116.     r ^= SBA(sb3, (s >>  0) & 0xffff);
  117.         r ^= SBA(sb2, (s >> 16) & 0xffff);
  118.         r ^= SBA(sb1, (s >> 32) & 0xffff);
  119.         r ^= SBA(sb0, (s >> 48) & 0xffff);
  120.       } 
  121.       s=l; l=r; r=s;
  122.     }
  123.  
  124.     ary[0] = l >> 32; ary[1] = l & 0xffffffff;
  125.     ary[2] = r >> 32; ary[3] = r & 0xffffffff;
  126.     return ary;
  127.   }
  128.  
  129. #endif
  130.